package com.project.nimsen.web.pub.tag;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import com.project.nimsen.dto.FileInfoDto;
import com.project.nimsen.service.IFileinfoService;
import com.project.nimsen.util.NimsenUtil;

import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
/**
 * 用于得文章的附件信息
 * */
@Component("nimsen_docannex")
public class DocannexTag extends BaseTag {
	@Resource
	IFileinfoService fileinfoService;
	/**
	 * @param id 得到那个文档的附件信息，默认为当前文档
	 * @param annextype 如果值为microimg则返回所有的缩略图
	 * 				,imglist为图片集合,默认为microimg
	 * @param file 必填,要输出的字段url返回附件的url,descs文件在些文档中的描述,
	 * 		  name是文件的名称
	 * @param order ASC为升序，DESC为降序，默认为ASC
	 * @param num 得到的第个附件信息
	 * */
	protected void exec(Environment env, Map params, TemplateModel[] loopVars,
			TemplateDirectiveBody body) throws TemplateException, IOException {
		String file = getParam("file");
		if(StringUtils.isBlank(file))
			return;
		String id = getParam("id");
		if(StringUtils.isBlank(id)){
			String curid = getAttr("archid");
			//如果当前文章编号也为空则返回
			if(StringUtils.isBlank(curid))
				return;
			id = curid;
		}
		FileInfoDto dto = new FileInfoDto();
		//设置查询信息
		dto.setArchid(id);
		dto.setRelatiovalue("microimg");
		String annextype = getParam("annextype");
		if(StringUtils.isNotBlank(annextype))
			dto.setRelatiovalue(annextype);
		String order = getParam("order");
		if("DESC".equals(order))
			dto.setOrderType("DESC");
		else
			dto.setOrderType("ASC");
		try {
			//得到要查询的附件信息
			List<Map<String, Object>> list = fileinfoService.findTagAnnexbyDocid(dto);
			if(CollectionUtils.isEmpty(list))
				return;
			//判断第输出第几个附件的信息
			Integer num = getIntegerParam("num");
			if(num==null||num<1)
				num = 1;
			//如果用户要显示的大于总附件则返回最后一个
			if(num>list.size())
				num = list.size();
			num = num-1;
			//得到要返回的附件信息
			Map<String, Object> map = list.get(num);
			//输出相应的信息
			if("url".equals(file)){
				outWrite(NimsenUtil.obj2String(map.get("filename")));
			}else if("descs".equals(file)){
				outWrite(NimsenUtil.obj2String(map.get("descs")));
			}else if("name".equals(file)){
				outWrite(NimsenUtil.obj2String(map.get("srcname")));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
